// 定义Shader的路径和名称，在材质面板中可通过 Graph/Point Surface 找到它
Shader "Graph/Point Surface" {

	// 属性块，定义在材质面板中可调节的参数
	Properties {
		_Smoothness ("Smoothness", Range(0,1)) = 0.5  // 光滑度滑块，范围0-1，默认0.5
	}
	
	// 子着色器，核心代码所在
	SubShader {
		// 使用CG语言编写着色器代码
		CGPROGRAM
		// 声明表面着色器，使用ConfigureSurface函数配置表面着色器
		// Standard表示使用标准光照模型，fullforwardshadows支持所有光源类型的阴影
		#pragma surface ConfigureSurface Standard fullforwardshadows
		#pragma target 3.0  // 指定着色器模型目标为3.0
		
		// 输入结构体，定义输入表面函数的参数
		struct Input {
			float3 worldPos;  // 世界空间位置坐标
		};

		// 声明光滑度，与Properties块中的_Smoothness对应
		float _Smoothness;

		// 表面配置函数
		// input提供输入数据，surface用于输出
		void ConfigureSurface (Input input, inout SurfaceOutputStandard surface) {
			// 将世界坐标的xy分量从[-1,1]范围转换到[0,1]范围，并赋给Albedo的rg通道
			// saturate函数将值限制在0-1范围内
			surface.Albedo.rg = saturate(input.worldPos.xy * 0.5 + 0.5);
			
			// 设置表面光滑度
			surface.Smoothness = _Smoothness;
		}
		// 结束CG代码块
		ENDCG
	}
	// 回退着色器，当当前SubShader不支持时使用Diffuse着色器
	FallBack "Diffuse"
}